page.tsx 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. "use client";
  2. import { getSendCodeApi } from "@/api/user";
  3. import ButtonOwn from "@/components/ButtonOwn";
  4. import DomainFooter from "@/components/DomainFooter";
  5. import HeaderBack from "@/components/HeaderBack";
  6. import { useRouter } from "@/i18n";
  7. import { useTranslations } from "next-intl";
  8. import { useSearchParams } from "next/navigation";
  9. import { FC, useEffect, useRef, useState } from "react";
  10. import "./page.scss";
  11. interface Props {}
  12. const ResetPhone: FC<Props> = () => {
  13. const t = useTranslations("VerificationPage");
  14. const router: any = useRouter();
  15. let [code, setCode] = useState("");
  16. const changeCode = (e: { target: { value: any } }) => {
  17. setCode(e.target.value.replace(/[^0-9]/g, ""));
  18. };
  19. let searchParams = useSearchParams();
  20. let user_phone = searchParams.get("userPhone");
  21. const sendCodeRequest = () => {
  22. if (!user_phone) return;
  23. getSendCodeApi({ user_phone }).then((res) => {
  24. if (res.code == 200) {
  25. setTime(60);
  26. setIsNote(true);
  27. }
  28. });
  29. };
  30. useEffect(() => {
  31. sendCodeRequest();
  32. // eslint-disable-next-line react-hooks/exhaustive-deps
  33. }, []);
  34. let [isNote, setIsNote] = useState(true);
  35. let [time, setTime] = useState(60);
  36. let timeRef: any = useRef();
  37. useEffect(() => {
  38. if (time && time != 0) {
  39. timeRef.current = setTimeout(() => {
  40. setTime((time) => time - 1);
  41. }, 1000);
  42. } else {
  43. setIsNote(false);
  44. }
  45. return () => {
  46. timeRef.current && clearInterval(timeRef.current);
  47. };
  48. }, [time]);
  49. const sendCodeFun = () => {
  50. if (isNote) return;
  51. sendCodeRequest();
  52. };
  53. const goPage = () => {
  54. if (!code || code.length < 6) return;
  55. router.push(`/confirmPassword?userPhone=${user_phone}&code=${code}`);
  56. };
  57. return (
  58. <div className="verification-box">
  59. <HeaderBack />
  60. <div className="main">
  61. <div className="title">
  62. <h2>{t("h2")}</h2>
  63. <div>
  64. {t("h3")} {user_phone}
  65. </div>
  66. </div>
  67. <div className="phoneInput">
  68. <input
  69. type="number"
  70. value={code}
  71. onChange={changeCode}
  72. placeholder={t("Reenviar")}
  73. maxLength={6}
  74. />
  75. <span className="after" onClick={sendCodeFun}>
  76. {isNote ? `${time}s` : t("Envie")}
  77. </span>
  78. </div>
  79. <div className="btnContent">
  80. <ButtonOwn active={code.length == 6} callbackFun={goPage}>
  81. {t("Completar")}
  82. </ButtonOwn>
  83. </div>
  84. </div>
  85. <DomainFooter />
  86. </div>
  87. );
  88. };
  89. export default ResetPhone;